查看原文
其他

数据呈现 | 简单易学!用Python最基础的绘图包来做动图

威武哥 数据Seminar 2021-06-03


前面我们讲过,在 Python 中有许多可视化的包(点击传送门回顾),每个包都有自己独特的特点。在这些包当中,有一个包是最最基础的,那就是matplotlib,学好它,日常基本绘图应该不在话下。
但是,这似乎仅限于在静态图,在matplotlib下如何实现由静态图变为动态图呢?
放心!matplotlib作为一个名牌绘图包,自然也有相应的模块实现这个功能,今天就让我们一起来学习学习吧。




函数简介


matplotlib中 绘制动图的核心函数是matplotlib.animation.FuncAnimation,其用法为:
animation.funcanimation(fig, animate, init_func, frames, fargs,interval, blit)
左右滑动查看更多
其中参数的具体解释如下:
fig: 我们创建的画布名称animate: 是重点,是我们每个时刻要更新图形对象的函数,返回值和init_func相同init_func: 初始化函数,其返回值就是每次都要更新的对象, 告诉FuncAnimation在不同时刻要更新哪些图形对象frames: 相当于时刻t,要模拟多少帧图画,不同时刻的t相当于animate的参数fargs:传递给每个调用的可选附加参数interval: 刷新频率,以毫秒计算blit: blit告诉动画只重绘修改的部分,结合上面保存的时间,blit=true会使动画显示得会非常快

注:函数官方解释请点击阅读原文




绘图代码


以绘制动态折线图为例。首先从国家统计局下载最近20年(1999年-2018年)城乡居民消费价格指数(上年=100),具体数据如下所示:

在得到数据后,我们便可以绘制动态折线图,代码如下:
import numpy as npimport pandas as pd import matplotlib.pyplot as pltimport matplotlib.animation as animation # 导入matplotlib动图模块# 在notebook上显示动图%matplotlib qt5 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号# 导入、处理数据df = pd.read_excel("C:/Users/yeahww/Desktop/index.xlsx") # 路径以文件位置为准,注意斜杠方向df = df.set_index("year") # 将year设置为索引x = df.indexy1 = df.cityy2 = df.country
# 绘图fig, ax = plt.subplots() # 生成子图,相当于fig = plt.figure(),ax = fig.add_subplot()line, = ax.plot(x, y1, color='g', linestyle = 'dashdot') # 绘制城市居民消费价格指数line2, = ax.plot(x, y2, color='r',linestyle = 'solid') # 绘制农村居民消费价格指数ax.set_xticklabels(x,rotation = 45) # 设置坐标标签 def update(num,x,y1,y2,line): # 通过帧数来不断更新新的数值 line.set_data(x[:num+1], y1[:num+1]) line.axes.axis([0, 20, 95, 110]) line2.set_data(x[:num+1], y2[:num+1]) line2.axes.axis([0, 20, 95, 110]) return line,line2 # 可以同时画两个或多个线,只要在update函数中返回多个线即可

ani = animation.FuncAnimation(fig, update,len(x), fargs=[x,y1,y2,line],interval=200, blit=True)#ani.save('index.gif') # 保存为gif图像,可在电脑工作路径找到图像文件plt.show()

左右滑动查看更多




动图呈现


如下图,一副简单的动态折线图的效果就出来了,相比静态折线图,尽管传达的信息是一致的,但是无论从生动性、美观程度还是可读性上,动态折线图还是要略胜一筹。此外,你还可以为下图继续添加装饰,比如图例,图表标题等等(可参考以往推文,点击传送门)。




图形解读


最后,从图中可以看到我国城乡居民CPI的演变过程,可以得到以下几点简单结论:

第一,城乡居民消费价格指数总体上呈相同的变化趋势。

第二,我国农村居民CPI在2001年到2011年期间均大于城市居民CPI,表明了农村的物价变动幅度高于城市。

第三,我国城乡CPI总体变动幅度不大,处于可控范围,除1999年、2002年、2009年城乡CPI均小于100外,其余年份均大于100,总体而言,物价处于上涨状态。







►往期推荐

回复【Python】👉简单有用易上手

回复【学术前沿】👉机器学习丨大数据

回复【数据资源】👉公开数据

回复【可视化】👉你心心念念的数据呈现

回复【老姚专栏】👉老姚趣谈值得一看


►一周热文

数据呈现 | 八图献礼祖国70华诞,我爱我的祖国

特别推荐丨老姚专栏:教科书没有讲的矩估计性质

数据呈现 | R绘制树图,透视长三角一体化层次关系

学术前沿 | DMSP-OLS夜间城市灯光数据文献综述

工具&方法 | “名牌包”:面板、时间序列模型常用R语言包





数据Seminar

这里是大数据、分析技术与学术研究的三叉路口


作者:威武哥(叶武威)
审阅:简华(何年华)编辑:青酱






    欢迎扫描👇二维码添加关注    


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存